/**
*  Resumen				
*  Objeto		       	: TareaCargaDatos.java
*  Descripci�n		  	: Clase utilizada para realizar la carga de objetos en sesion al momento de iniciar la aplicacion
*  Fecha de Creaci�n    : 09/08/2013.
*  PE de Creaci�n 		: PE-QUEJAS.
*  Autor			   	: Giovani Romero
*  -------------------------------------------------------------------------------------
*  Modificaciones
*  Motivo	            Fecha          Nombre         Descripci�n
*  -------------------------------------------------------------------------------------
*
*/

package pe.gob.osce.sirenas.wd.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import javax.faces.model.SelectItem;

import pe.gob.osce.sirenas.model.AreaProfesionDTO;
import pe.gob.osce.sirenas.model.CentroEstudiosDTO;
import pe.gob.osce.sirenas.model.DistritoDTO;
import pe.gob.osce.sirenas.model.EstadoDTO;
import pe.gob.osce.sirenas.model.MateriaControversiaDTO;
import pe.gob.osce.sirenas.model.MotivoDTO;
import pe.gob.osce.sirenas.model.PaisDTO;
import pe.gob.osce.sirenas.model.ParametrosDTO;
import pe.gob.osce.sirenas.model.ProvinciaDTO;
import pe.gob.osce.sirenas.model.RegionDTO;
import pe.gob.osce.sirenas.model.ViaDTO;
import pe.gob.osce.sirenas.model.ZonaDTO;


public class TareaCargaDatos {
	

	/**
	* Metodo que realiza la transformacion a una lista SelectItem
	* @param lstUnidadesAtencion lista a transformar, tipo List<BUnidadAtencion>
	* @return listaDetalle, lista que contiene la lista de unidades atencion, tipo List<SelectItem>.
	*/
	public static ArrayList<SelectItem> transformarParametrosAListaSelectItem(List<ParametrosDTO> listaParametros){
		ArrayList<SelectItem> listaDetalle=new ArrayList<SelectItem>();
		SelectItem tempSelectItem=null;
		listaDetalle.add(new SelectItem(ConstanteWeb.CODIGO_SELECCIONE,ConstanteWeb.VALOR_SELECCIONE));
		for (ParametrosDTO parametro : listaParametros) {
			tempSelectItem=new SelectItem(parametro.getIdParametro(),parametro.getDescParametro(),parametro.getDescValor1());
			listaDetalle.add(tempSelectItem);
		}		
		return listaDetalle;
	}


	/**
	* Metodo que realiza la transformacion a una lista SelectItem
	* @param lstUnidadesAtencion lista a transformar, tipo List<BUnidadAtencion>
	* @return listaDetalle, lista que contiene la lista de unidades atencion, tipo List<SelectItem>.
	*/
	public static ArrayList<SelectItem> obtenerReglasAListaSelectItem(List<ParametrosDTO> listaParametros,Long idPadre){
		ArrayList<SelectItem> listaDetalle=new ArrayList<SelectItem>();
		SelectItem tempSelectItem=null;
		for (ParametrosDTO parametro : listaParametros) {
			if(parametro.getIdParametroPadre()==idPadre){
				//Valor de la Regla - Descripcion de la Regla (esta descripcion tambien esta en el properties sirenas-ui
				tempSelectItem=new SelectItem(""+parametro.getDescValor2(),parametro.getDescParametro());
				listaDetalle.add(tempSelectItem);
			}
		}		
		return listaDetalle;
	}

	/**
	 * Método que realiza la transformacion a una lista a HashMap
	 * @param lstBUbigeo lista a transformar, tipo List<BUbigeo>
	 * @return mapaDetalle, lista que contiene la lista a transformar, tipo HashMap<String,String>.
	 */
	public static HashMap<String,Long> transformarCorrelativosAMapa(List<ParametrosDTO> listaParametros,Long idPadre){
		HashMap<String,Long> mapaDetalle=new HashMap<String,Long>();
		for (ParametrosDTO parametro : listaParametros) {
			if(parametro.getIdParametroPadre()==idPadre){
				//La descripcion del Correlativo sera la Llave para obtener el Valor del Mismo
				mapaDetalle.put(parametro.getDescParametro(),parametro.getDescValor2());
			}
		}
		return mapaDetalle;
	}
	/**
	* Metodo que realiza la transformacion a una lista SelectItem
	* @param lstUnidadesAtencion lista a transformar, tipo List<BUnidadAtencion>
	* @return listaDetalle, lista que contiene la lista de unidades atencion, tipo List<SelectItem>.
	*/
	public static Integer obtenerPlazoSolicitud(List<ParametrosDTO> listaParametros,Long idPlazo){
		Integer plazoSolicitud=null;
		for (ParametrosDTO parametro : listaParametros) {
			if(parametro.getIdParametro()==idPlazo){
				plazoSolicitud=(parametro.getDescValor2()==null)?0:parametro.getDescValor2().intValue();
			}
		}		
		return plazoSolicitud;
	}
	/**
	* Metodo que realiza la transformacion a una lista SelectItem
	* @param lstUnidadesAtencion lista a transformar, tipo List<BUnidadAtencion>
	* @return listaDetalle, lista que contiene la lista de unidades atencion, tipo List<SelectItem>.
	*/
	public static ArrayList<SelectItem> obtenerParametroHijoAListaSelectItem(List<ParametrosDTO> listaParametros,Long idPadre){
		ArrayList<SelectItem> listaDetalle=new ArrayList<SelectItem>();
		SelectItem tempSelectItem=null;
		listaDetalle.add(new SelectItem(ConstanteWeb.CODIGO_SELECCIONE,ConstanteWeb.VALOR_SELECCIONE));
		for (ParametrosDTO parametro : listaParametros) {
			if(parametro.getIdParametroPadre()==idPadre){
				tempSelectItem=new SelectItem(parametro.getIdParametro(),
						parametro.getDescParametro(),
						(parametro.getDescValor2()==null)?parametro.getDescValor1():parametro.getDescValor2().toString());
				listaDetalle.add(tempSelectItem);
			}
		}		
		return listaDetalle;
	}
	
	/**
	* Metodo que realiza la transformacion a una lista SelectItem
	* @param lstUnidadesAtencion lista a transformar, tipo List<BUnidadAtencion>
	* @return listaDetalle, lista que contiene la lista de unidades atencion, tipo List<SelectItem>.
	*/
	public static ArrayList<SelectItem> transformarRegionAListaSelectItem(List<RegionDTO> lstRegion){
		ArrayList<SelectItem> listaDetalle=new ArrayList<SelectItem>();
		SelectItem tempSelectItem=null;
		listaDetalle.add(new SelectItem(ConstanteWeb.CODIGO_SELECCIONE,ConstanteWeb.VALOR_SELECCIONE));
		for (RegionDTO region : lstRegion) {
			tempSelectItem=new SelectItem(region.getIdRegion(),region.getNomRegion());
			listaDetalle.add(tempSelectItem);
		}		
		return listaDetalle;
	}

	/**
	* Metodo que realiza la transformacion a una lista SelectItem
	* @param lstUnidadesAtencion lista a transformar, tipo List<BUnidadAtencion>
	* @return listaDetalle, lista que contiene la lista de unidades atencion, tipo List<SelectItem>.
	*/
	public static ArrayList<SelectItem> transformarProvinciaAListaSelectItem(List<ProvinciaDTO> lstProvincia){
		ArrayList<SelectItem> listaDetalle=new ArrayList<SelectItem>();
		SelectItem tempSelectItem=null;
		listaDetalle.add(new SelectItem(ConstanteWeb.CODIGO_SELECCIONE,ConstanteWeb.VALOR_SELECCIONE));
		for (ProvinciaDTO provincia : lstProvincia) {
			tempSelectItem=new SelectItem(provincia.getIdProvincia(),provincia.getNomProvincia());
			listaDetalle.add(tempSelectItem);
		}		
		return listaDetalle;
	}

	/**
	* Método que realiza la transformacion a una lista SelectItem
	* @param lstUnidadesAtencion lista a transformar, tipo List<BUnidadAtencion>
	* @return listaDetalle, lista que contiene la lista de unidades atencion, tipo List<SelectItem>.
	*/
	public static ArrayList<SelectItem> transformarDistritoAListaSelectItem(List<DistritoDTO> lstDistrito){
		ArrayList<SelectItem> listaDetalle=new ArrayList<SelectItem>();
		SelectItem tempSelectItem=null;
		listaDetalle.add(new SelectItem(ConstanteWeb.CODIGO_SELECCIONE,ConstanteWeb.VALOR_SELECCIONE));
		for (DistritoDTO distrito : lstDistrito) {
			tempSelectItem=new SelectItem(distrito.getIdProvincia(),distrito.getNomDistrito());
			listaDetalle.add(tempSelectItem);
		}		
		return listaDetalle;
	}
	

	/**
	 * Método que realiza la transformacion a una lista a HashMap
	 * @param lstBUbigeo lista a transformar, tipo List<BUbigeo>
	 * @return mapaDetalle, lista que contiene la lista a transformar, tipo HashMap<String,String>.
	 */
	public static HashMap<String,String> transformarRegionAMapa(List<RegionDTO> listaRegion){
		HashMap<String,String> mapaDetalle=new HashMap<String,String>();
		for (RegionDTO region : listaRegion) {
			mapaDetalle.put(String.valueOf(region.getIdRegion()),region.getNomRegion());
		}
		return mapaDetalle;
	}

	/**
	 * Método que realiza la transformacion a una lista a HashMap
	 * @param lstBUbigeo lista a transformar, tipo List<BUbigeo>
	 * @return mapaDetalle, lista que contiene la lista a transformar, tipo HashMap<String,String>.
	 */
	public static HashMap<String,String> transformarProvinciaAMapa(List<ProvinciaDTO> listaProvincia){
		HashMap<String,String> mapaDetalle=new HashMap<String,String>();
		for (ProvinciaDTO provincia : listaProvincia) {
			mapaDetalle.put(String.valueOf(provincia.getIdProvincia()),provincia.getNomProvincia());
		}
		return mapaDetalle;
	}
	/**
	 * Método que realiza la transformacion a una lista a HashMap
	 * @param lstBUbigeo lista a transformar, tipo List<BUbigeo>
	 * @return mapaDetalle, lista que contiene la lista a transformar, tipo HashMap<String,String>.
	 */
	public static HashMap<String,String> transformarDistritoAMapa(List<DistritoDTO> listaDistrito){
		HashMap<String,String> mapaDetalle=new HashMap<String,String>();
		for (DistritoDTO distrito : listaDistrito) {
			mapaDetalle.put(String.valueOf(distrito.getIdProvincia()),distrito.getNomDistrito());
		}
		return mapaDetalle;
	}
	

	/**
	* Metodo que realiza la transformacion a una lista SelectItem
	* @param lstUnidadesAtencion lista a transformar, tipo List<BUnidadAtencion>
	* @return listaDetalle, lista que contiene la lista de unidades atencion, tipo List<SelectItem>.
	*/
	public static ArrayList<SelectItem> transformarAreaProfesionAListaSelectItem(List<AreaProfesionDTO> listaAreaProfesion){
		ArrayList<SelectItem> listaDetalle=new ArrayList<SelectItem>();
		SelectItem tempSelectItem=null;
		listaDetalle.add(new SelectItem(ConstanteWeb.CODIGO_SELECCIONE,ConstanteWeb.VALOR_SELECCIONE));
		for (AreaProfesionDTO areaProfesion : listaAreaProfesion) {
			tempSelectItem=new SelectItem(areaProfesion.getIdAreaProfesion(),areaProfesion.getDescAreaProfesion());
			listaDetalle.add(tempSelectItem);
		}		
		return listaDetalle;
	}
	/**
	* Metodo que realiza la transformacion a una lista SelectItem
	* @param lstUnidadesAtencion lista a transformar, tipo List<BUnidadAtencion>
	* @return listaDetalle, lista que contiene la lista de unidades atencion, tipo List<SelectItem>.
	*/
	public static ArrayList<SelectItem> transformarCentroEstudiosAListaSelectItem(List<CentroEstudiosDTO> listaCentroEstudios){
		ArrayList<SelectItem> listaDetalle=new ArrayList<SelectItem>();
		SelectItem tempSelectItem=null;
		listaDetalle.add(new SelectItem(ConstanteWeb.CODIGO_SELECCIONE,ConstanteWeb.VALOR_SELECCIONE));
		for (CentroEstudiosDTO centroEstudios : listaCentroEstudios) {
			tempSelectItem=new SelectItem(centroEstudios.getIdCentroEstdudios(),centroEstudios.getDescCentroEstudios());
			listaDetalle.add(tempSelectItem);
		}		
		return listaDetalle;
	}
	/**
	* Metodo que realiza la transformacion a una lista SelectItem
	* @param lstUnidadesAtencion lista a transformar, tipo List<BUnidadAtencion>
	* @return listaDetalle, lista que contiene la lista de unidades atencion, tipo List<SelectItem>.
	*/
	public static ArrayList<SelectItem> transformarZonasAListaSelectItem(List<ZonaDTO> listaZonas){
		ArrayList<SelectItem> listaDetalle=new ArrayList<SelectItem>();
		SelectItem tempSelectItem=null;
		listaDetalle.add(new SelectItem(ConstanteWeb.CODIGO_SELECCIONE,ConstanteWeb.VALOR_SELECCIONE));
		for (ZonaDTO zonaDTO : listaZonas) {
			tempSelectItem=new SelectItem(zonaDTO.getIdZona(),zonaDTO.getDesZona());
			listaDetalle.add(tempSelectItem);
		}		
		return listaDetalle;
	}
	/**
	* Metodo que realiza la transformacion a una lista SelectItem
	* @param lstUnidadesAtencion lista a transformar, tipo List<BUnidadAtencion>
	* @return listaDetalle, lista que contiene la lista de unidades atencion, tipo List<SelectItem>.
	*/
	public static ArrayList<SelectItem> transformarViasAListaSelectItem(List<ViaDTO> listaVias){
		ArrayList<SelectItem> listaDetalle=new ArrayList<SelectItem>();
		SelectItem tempSelectItem=null;
		listaDetalle.add(new SelectItem(ConstanteWeb.CODIGO_SELECCIONE,ConstanteWeb.VALOR_SELECCIONE));
		for (ViaDTO viaDTO : listaVias) {
			tempSelectItem=new SelectItem(viaDTO.getIdVia(),viaDTO.getDesVia());
			listaDetalle.add(tempSelectItem);
		}		
		return listaDetalle;
	}
	/**
	* Metodo que realiza la transformacion a una lista SelectItem
	* @param lstUnidadesAtencion lista a transformar, tipo List<BUnidadAtencion>
	* @return listaDetalle, lista que contiene la lista de unidades atencion, tipo List<SelectItem>.
	*/
	public static ArrayList<SelectItem> transformarPaisAListaSelectItem(List<PaisDTO> listaPais){
		ArrayList<SelectItem> listaDetalle=new ArrayList<SelectItem>();
		SelectItem tempSelectItem=null;
		listaDetalle.add(new SelectItem(ConstanteWeb.CODIGO_SELECCIONE,ConstanteWeb.VALOR_SELECCIONE));
		for (PaisDTO pais : listaPais) {
			tempSelectItem=new SelectItem(pais.getIdPais(),pais.getDescPais());
			listaDetalle.add(tempSelectItem);
		}		
		return listaDetalle;
	}

	/**
	* Metodo que realiza la transformacion a una lista SelectItem
	* @param lstUnidadesAtencion lista a transformar, tipo List<BUnidadAtencion>
	* @return listaDetalle, lista que contiene la lista de unidades atencion, tipo List<SelectItem>.
	*/
	public static ArrayList<SelectItem> transformarMotivosAListaSelectItem(List<MotivoDTO> listaMotivos,String tipoMotivo){
		ArrayList<SelectItem> listaDetalle=new ArrayList<SelectItem>();
		SelectItem tempSelectItem=null;
		listaDetalle.add(new SelectItem(ConstanteWeb.CODIGO_SELECCIONE,ConstanteWeb.VALOR_SELECCIONE));
		for (MotivoDTO motivo : listaMotivos) {
			if(motivo.getTipoMotivo().equals(tipoMotivo)){
				tempSelectItem=new SelectItem(motivo.getIdMotivo(),motivo.getDescMotivo());
				listaDetalle.add(tempSelectItem);
			}
		}		
		return listaDetalle;
	}
	
	/**
	* Metodo que realiza la transformacion a una lista SelectItem
	* @param lstUnidadesAtencion lista a transformar, tipo List<BUnidadAtencion>
	* @return listaDetalle, lista que contiene la lista de unidades atencion, tipo List<SelectItem>.
	*/
	public static ArrayList<SelectItem> transformarMateriaControversiaAListaSelectItem(List<MateriaControversiaDTO> listaMateriaControversia){
		ArrayList<SelectItem> listaDetalle=new ArrayList<SelectItem>();
		SelectItem tempSelectItem=null;
		listaDetalle.add(new SelectItem(ConstanteWeb.CODIGO_SELECCIONE,ConstanteWeb.VALOR_SELECCIONE));
		for (MateriaControversiaDTO materiaControversia : listaMateriaControversia) {
			tempSelectItem=new SelectItem(materiaControversia.getIdMateriaControversia(),materiaControversia.getDescMateriaControversia());
			listaDetalle.add(tempSelectItem);
		}		
		return listaDetalle;
	}
	
	/**
	* Metodo que realiza la transformacion a una lista SelectItem
	* @param lstUnidadesAtencion lista a transformar, tipo List<BUnidadAtencion>
	* @return listaDetalle, lista que contiene la lista de unidades atencion, tipo List<SelectItem>.
	*/
	public static ArrayList<SelectItem> transformarEstadoAListaSelectItem(List<EstadoDTO> listaEstado,String tipoEstado){
		ArrayList<SelectItem> listaDetalle=new ArrayList<SelectItem>();
		SelectItem tempSelectItem=null;
		listaDetalle.add(new SelectItem(ConstanteWeb.CODIGO_SELECCIONE,ConstanteWeb.VALOR_SELECCIONE));
		for (EstadoDTO estado: listaEstado) {
			if(estado.getTipoEstado().equals(tipoEstado)){
				//Solo aquellos estados que implican una actualizacion de estado
				if(estado.getIndUpdEstado()){
					tempSelectItem=new SelectItem(estado.getIdEstado(),estado.getTagEstado());
					listaDetalle.add(tempSelectItem);
				}
			}
		}		
		return listaDetalle;
	}

	/**
	* Metodo que realiza la transformacion a una lista SelectItem
	* @param lstUnidadesAtencion lista a transformar, tipo List<BUnidadAtencion>
	* @return listaDetalle, lista que contiene la lista de unidades atencion, tipo List<SelectItem>.
	*/
	public static ArrayList<SelectItem> cargarListaTipoFicha(){
		ArrayList<SelectItem> listaDetalle=new ArrayList<SelectItem>();
		SelectItem tempSelectItem=null;
		listaDetalle.add(new SelectItem(ConstanteWeb.CODIGO_TODAS,ConstanteWeb.VALOR_TODAS));
		listaDetalle.add(new SelectItem(ConstanteWeb.TIPO_FICHA.ARBITRO.toString(),ConstanteWeb.TIPO_FICHA.ARBITRO.toString()));
		listaDetalle.add(new SelectItem(ConstanteWeb.TIPO_FICHA.SECRETARIO.toString(),ConstanteWeb.TIPO_FICHA.SECRETARIO.toString()));
		
		return listaDetalle;
	}
}